Ana içeriğe geç

Belirli Aralıktaki Blok Uzunluklarının Tarihlerini Al

Covalent Api sayesinde girilen tarih girdileri arasındaki blokların uzunlukları ve hangi tarihte madenciler tarafından imzalanarak zincire eklendiği bulunabilmektedir. Bu veri sayesinde belirlenen tarihler arasında kaç blok yazıldığı, ne sıklıkla yazıldığı gibi önemli bilgilere erişilir. Bu veriler ışığında geçmişte yaşanmış bir kriz veya bir hata verisel açıdan ele alınabilir.

  import requests 

Tablo 98

Tablo 98'de fonksiyonlarda olduğu gibi ilk olarak "requests" kütüphanesi daha önce eklenmediyse eklenmelidir. Bu kütüphane ile oluşturulan URL'leri sorgulanmaktadır. Öncesinde kütüphane import metodu ile eklendiyse yeniden eklenmesine gerek yoktur. Birden fazla eklenmesi kodun derlenme süresini uzatmaktadır.

  def AralıktakiBlokUzunluklarınıTarihleriniAl(ApiAnahtarı, Zincir\_Numarası, BaşlangıçTarihi, BitişTarihi): 

Tablo 99

Tablo 99'da da belirtildiği üzere Fonksiyon tanımlanırken AralıktakiBlokUzunluklarınıTarihleriniAl adı tercih edilmiştir. Bu tercih değişebilmektedir. Fonksiyon "def" metodu ile tanımlanır ve içerisine 4 parametre alır. Bu parametrelere sırasıyla bakılacak olunursa:

  • ApiAnahtarı: Kayıt olunurken alınan kimlik anahtarıdır. Sorguları yaparken yapan kişiyi belirtmek için kullanılır. Covalent Api'ye kayıt olunurken ücretsiz bir şekilde oluşturulur
  • Zincir_Numarası: İçerisinden veri alınmak istenen blok zinciri ifade eder. Hangi zincirin hangi numaraya ait olduğu öncesinde belirtilmektedir.
  • Başlangıç Tarihi: Blokların alınmaya başlanacağı belirtmektedir. Ancak özel bir formatı bulunmaktadır. Bu formatın dışında kullanılırsa çalışamayacaktır. Format "yyyy-aa-ggTss:dd:ssZ" şeklinde olmaktadır. Açılarak okunması gerekirse "Yıl-Ay-Gün:TSaat:Dakika:SaniyeZ" şeklinde girdi istemektedir.
  • BitişTarihi: Blokların alınmasının hangi tarihe kadar devam edeceğini belirtmektedir. Ancak özel bir formatı bulunmaktadır. Bu formatın dışında kullanılırsa çalışamayacaktır. Format "yyyy-aa-ggTss:dd:ssZ" şeklinde olmaktadır. Açılarak okunması gerekirse "Yıl-Ay-GünTSaat:Dakika:SaniyeZ" şeklinde girdi istemektedir.
  URL = "https://api.covalenthq.com" + "/v1/" + Zincir\_Numarası + "/block\_v2/" + BaşlangıçTarihi + "/" + BitişTarihi + "/?&key=" + ApiAnahtarı 

Tablo 100

Tablo 100'de URL yapısının girilen parametreler ile oluşturulması ile karşılaşılmaktadır. Bu oluşturma sırasında kullanılan parametreler yanı sıra kalıp kavramlar ile de karşılaşılmaktadır. Bu kalıplar arasına parametreler uygun bir şekilde yerleştirilmelidir. Aksi halde hata ile karşılaşılacaktır. Eklenen parametrelere sırası ile bakılması gerekirse; ilk olarak zincir numarası eklenir. Devamında başlangıç ve bitiş tarihi gelirken son olarak da Api anahtarı eklenerek URL yapısı sorguya hazır hale gelir.

  istek = requests.get(URL) hamverim = (istek.json()) 

Tablo 101

Tablo 101'de gösterildiği üzere URL yapısının oluşturulması sonrasında başlangıçta eklenen "requests" kütüphanesinden "get" metodu kullanılarak sorgu yapılır ve bu sorgu "istek" adındaki değişkene kaydedilir. Alt satırında ise sorgulanan ve değişkene kaydedilen sorgunun ".json" fonksiyonu ile anahtarlar ile erişim sağlanmaya açık olan json formatına çevrildiği görülmektedir. Yeniden formatlanan veri "hamverim" adındaki değişkene kaydedilerek anahtar işlemlerine hazır hale gelir.

  verim = hamverim["data"] 

Tablo 102

Veri kullanıma hazır olsa da halen ham haldedir. Bunun nedeni içerisinde kullanılacak verinin yanında yapılan sorgunun başarılı olup olmadığı ve varsa hataları yer almaktadır. Ancak bu veriler şu anlık kullanılmayacaktır. Bu nedenle Tablo 102'de "hamverim" içerisinden "data" anahtarına erişilerek kullanılması planlanan veri "verim" değişkenine kaydedilir. Artık anahtarlama işlemleri "verim" üzerinden gerçekleşecektir.

  SonGüncelleme = verim["updated\_at"] 

Tablo 103

Tablo 103'de görüldüğü üzere kullanıma hazırlanan veri içerisinden erişilecek ilk anahtar "updated_at" olmaktadır. Bu anahtar ile verinin tüm aralıklar için ortak bir şekilde son kontrol güncellemesinin gerçekleştiği zamana erişilir ve "SonGüncelleme" adındaki değişkene kaydı sağlanır. Bu tarih ile alınan verinin ne kadar sağlıklı olup olmadığı belirlenebilmektedir.

  liste = [] 

Tablo 104

Anahtarlara erişim sağlandıkça ve bu verilerin değişkenlere kaydı sağlandıkça oluşan verinin kaydı gerekmektedir. Bu kaydı sağlamak için Tablo 104'de "liste" adında boş bir liste oluşturulur. Veriler sonrasında bu listeyi dolduracaktır.

  liste.append("Son Güncelleme: " + SonGüncelleme) 

Tablo 105

Liste oluşturulduktan sonra Tablo 102'de kaydedilen sorgunun ortak verisi SonGüncelleme değişkeninin uygun başlığına string toplama işlemi Tablo 104'de verildiği üzere Tablo 105'ile eklenmektedir.

  items = verim["items"] 

Tablo 106

Tablo 106'da verildiği üzere veri içerisinde blok bilgileri "items" anahtarına bağlı olarak taşınmaktadır. Bu anahtar ile erişilen veri sonrasında "items" adlı değişkene kaydedilir. Değişken bir liste olmaktadır ve içerisinde blokları index numaralarına bağlı olarak taşımaktadır. Bu elementlere for döngüsü ile ulaşılır.

  index = 1 

Tablo 107

Döngü içerisine girilmeden önce döngüde verileri kaydederken birbiri ile karışmaması amacıyla kullanılmak üzere bir numara Tablo 107'de tanımlanmaktadır. Bu numara döngü içerisinde arttırılarak başlıklar içerisindeki veri farklı numaralara sahip olur ve birbiri ile karışma durumu gerçekleşmez.

  for item in items: 

Tablo 108

Tablo 108'de "items" adında kaydettiğimiz liste içerisinde for döngüsü ile her bir elemana "item" adı verilerek işlemler uygulanmaktadır. Bu şekilde liste baştan sona taranmış hale gelir.

  İmzalanmaTarihi = ["İndex Numarası: "+ str(index),"İmzalanma Tarihi: " + item["signed\_at"]]
BlokUzunluğu = ["İndex Numarası: "+ str(index),"Blok Uzunluğu: " + str(item["height"])]

Tablo 109

Tablo 109'da Döngü içerisine girildiğinde fonksiyonun asıl çıktıları ile karşılaşılmaktadır. Buradaki veriler 2 elementten oluşan listeler halinde kaydedilmektedir. İlk eleman verinin alınma sırasını belirten index numarasının başlığı ve içeriği ile eklenmesidir. Eklenilirken string toplama işlemi yapıldığından ötürü "str()" fonksiyonu ile integer formatında olan "index" değişkeni string formatına çevrilir. Devamında ikinci eleman olarak uygun başlık ile anahtar ile verinin ulaşılan kısmı string toplama işlemine sokulur. Aynı şekilde string olmayan değerler "str()" fonksiyonunun içerisinden geçmelidir. Anahtarlara ayrıntılı bir şekilde bakılacak olunursa:

  • İmzalanmaTarihi: Bloğun madenciler tarafından zincire imzalanarak eklendiği tarihi ifade etmektedir. İtem içerisinden "signed_at" anahtarı ile erişilir.
  • BlokUzunluğu: Madenciler tarafından imzalanarak zincire eklenen bloğun hangi sıra ile zincire eklendiğini ifade etmektedir. İtem içerisinden "height" anahtarı ile erişilir.
  liste.append(İmzalanmaTarihi) liste.append(BlokUzunluğu) 

Tablo 110

Tablo 110'da görüldüğü üzere uygun anahtar ile erişilip başlıklandırılan ve index numarası ile sıralanan veri listeye "append" fonksiyonu ile sırayla eklenmektedir.

  index += 1 

Tablo 111

Tablo 111'de verildiği üzere döngüden çıkılmadan önce index değeri bir arttırılır. Bu şekilde yapılmasının nedeni döngü içinde aynı başlıkta kaydedilen verinin birbirinden ayrılmasını sağlamaktır. Bu arttırmanın ardından döngünün sonuna gelinir ve tüm aralığı tarayana kadar döngü içerisinde kalınır.

  DahaFazlaVeriVarMı = "Daha fazla Veri Var mı: "+str(verim["pagination"]["has\_more"]) SayfaNumarası = "Sayfa Numarası: " + str(verim["pagination"]["page\_number"]) SayfaBüyüklüğü = "Sayfa Büyüklüğü: "+ str(verim["pagination"]["page\_size"]) ToplamVeriSayısı = "Toplam Veri Sayısı: "+ str(verim["pagination"]["total\_count"]) 

Tablo 112

Döngüden çıkıldıktan sonra yeni anahtarlar ile karşılaşılmaktadır. Bu anahtarlar Tablo 112'de görüldüğü gibi verinin kaydedilen kısmından fazla olup olmadığını belirtmektedir. Covalent Api tek sayfada 100 döngü ile başlangıç değeri belirlemiştir. Bunun üstündeki değerler bu anahtarlarda bulunmaktadır. Verilere sırası ile bakılması gerekirse:

  • DahaFazlaVeriVarMı: Çekilen veriden daha fazla bulunup bulunmadığını ifade etmektedir. Veri içerisindeki "pagination" anahtarına bağlı olan "has_more" anahtarı ile erişilmektedir.
  • SayfaNumarası: Çekilen ve sayfalandırılan verinin hangi sayfasında işlem yapıldığını ifade etmektedir. Veri içerisindeki "pagination" anahtarına bağlı olan "page_number" anahtarı ile erişilmektedir.
  • SayfaBüyüklüğü: Çekilen ve sayfalandırılan verinin sayfa başına sahip olduğu elementi ifade etmektedir. Başlangıç değeri CovelentApi tarafından 100 olarak belirlenmiştir. Veri içerisindeki "pagination" anahtarına bağlı olan "page_size" anahtarı ile erişilmektedir.
  • ToplamVeriSayısı: Çekilen verinin toplam kaç elemente sahip olduğunu ifade etmektedir. Sayfa büyüklüğü ile bölünerek toplam sayfa sayısı bulunabilmektedir. Veri içerisindeki "pagination" anahtarına bağlı olan "total_count" anahtarı ile erişilmektedir.
  liste.append(DahaFazlaVeriVarMı) liste.append(SayfaNumarası) liste.append(SayfaBüyüklüğü) liste.append(ToplamVeriSayısı) 

Tablo 113

Tablo 113'de uygun başlıklar ile değişkenlere kaydedilen bu veriler sırası ile listeye ".append" fonksiyonu kullanılarak eklenmektedir.

  for i in liste: print(i) 

Tablo 114

Tablo 114'de tüm verilerin kaydı sağlandıktan sonra for döngüsü ile her bir liste elamanı "i" olarak adlandırılır ve ekrana yazdırılır. Bu şekilde veri görselleştirilmiş olur.

  return liste 

Tablo 115

Son olarak Tablo 115'de fonksiyon çıktısı olarak listenin return metodu kullanılarak çıktısı verilir ve kullanıma hazır hale gelir.

  def AralıktakiBlokUzunluklarınıTarihlerinial(ApiAnahtarı, Zincir\_Numarası, BaşlangıçTarihi, BitişTarihi): URL = "https://api.covalenthq.com" + "/v1/" + Zincir\_Numarası + "/block\_v2/" + BaşlangıçTarihi+"/"+BitişTarihi + "/?&key=" + ApiAnahtarı istek = requests.get(URL) verim = (istek.json()) verim = verim["data"] SonGüncelleme = verim["updated\_at"] liste = [] liste.append("Son Güncelleme: " + SonGüncelleme) items = verim["items"] index = 1 for item in items: İmzalanmaTarihi = ["İndex Numarası: "+ str(index),"İmzalanma Tarihi: " + item["signed\_at"]] BlokUzunluğu = ["İndex Numarası: "+ str(index),"Blok Uzunluğu: " + str(item["height"])] liste.append(İmzalanmaTarihi) liste.append(BlokUzunluğu) index += 1 DahaFazlaVeriVarMı = "Daha fazla Veri Var mı: "+str(verim["pagination"]["has\_more"]) SayfaNumarası = "Sayfa Numarası: " + str(verim["pagination"]["page\_number"]) SayfaBüyüklüğü = "Sayfa Büyüklüğü: "+ str(verim["pagination"]["page\_size"]) ToplamVeriSayısı = "Toplam Veri Sayısı: "+ str(verim["pagination"]["total\_count"]) liste.append(DahaFazlaVeriVarMı) liste.append(SayfaNumarası) liste.append(SayfaBüyüklüğü) liste.append(ToplamVeriSayısı) for i in liste: print(i) return liste 

Tablo 116

Tablo 116'da kodun tamamı ifade edimiştir. Özetlemek gerekirse ilk olarak uygun parametreler kullanılarak fonksiyon tanımlaması yapılır. Sonrasında yapılan fonksiyon tanımındaki parametreler ile string formatında URL yapısı oluşturulur. Oluşturulan URL yapısı eklenen "requests" kütüphanesi ile sorgulanır. Sorgu "json" formatına çevrilir ve ortak anahtarlar değişkenleri üzerinden listeye eklenir. Eklenme işlemi sonrasında "items" listesi içerisinde for döngüsü kullanılarak farklı elamanlara sahip elementler uygun başlıklandırma ve indexleme yöntemleri ile listeye eklenir. Liste yazdırılır ve fonksiyon çıktısı olarak kaydedilir.

  Son Güncelleme: 2021-08-07T22:46:38.186137930Z ['İndex Numarası: 1', 'İmzalanma Tarihi: 2018-01-01T00:00:02Z'] ['İndex Numarası: 1', 'Blok Uzunluğu: 4832686'] ['İndex Numarası: 2', 'İmzalanma Tarihi: 2018-01-01T00:00:12Z'] ['İndex Numarası: 2', 'Blok Uzunluğu: 4832687'] ['İndex Numarası: 3', 'İmzalanma Tarihi: 2018-01-01T00:00:14Z'] ['İndex Numarası: 3', 'Blok Uzunluğu: 4832688'] ['İndex Numarası: 4', 'İmzalanma Tarihi: 2018-01-01T00:00:19Z'] ['İndex Numarası: 4', 'Blok Uzunluğu: 4832689'] ['İndex Numarası: 5', 'İmzalanma Tarihi: 2018-01-01T00:00:25Z'] ['İndex Numarası: 5', 'Blok Uzunluğu: 4832690'] ... ... ... ['İndex Numarası: 25', 'İmzalanma Tarihi: 2018-01-01T00:04:38Z'] ['İndex Numarası: 25', 'Blok Uzunluğu: 4832710'] ['İndex Numarası: 26', 'İmzalanma Tarihi: 2018-01-01T00:04:47Z'] ['İndex Numarası: 26', 'Blok Uzunluğu: 4832711'] ['İndex Numarası: 27', 'İmzalanma Tarihi: 2018-01-01T00:04:54Z'] ['İndex Numarası: 27', 'Blok Uzunluğu: 4832712'] ['İndex Numarası: 28', 'İmzalanma Tarihi: 2018-01-01T00:05:16Z'] ['İndex Numarası: 28', 'Blok Uzunluğu: 4832713'] ['İndex Numarası: 29', 'İmzalanma Tarihi: 2018-01-01T00:05:28Z'] ['İndex Numarası: 29', 'Blok Uzunluğu: 4832714'] ['İndex Numarası: 30', 'İmzalanma Tarihi: 2018-01-01T00:05:34Z'] ... ... ... ['İndex Numarası: 50', 'İmzalanma Tarihi: 2018-01-01T00:11:37Z'] ['İndex Numarası: 50', 'Blok Uzunluğu: 4832735'] ['İndex Numarası: 51', 'İmzalanma Tarihi: 2018-01-01T00:11:43Z'] ['İndex Numarası: 51', 'Blok Uzunluğu: 4832736'] ['İndex Numarası: 52', 'İmzalanma Tarihi: 2018-01-01T00:11:49Z'] ['İndex Numarası: 52', 'Blok Uzunluğu: 4832737'] ['İndex Numarası: 53', 'İmzalanma Tarihi: 2018-01-01T00:12:36Z'] ['İndex Numarası: 53', 'Blok Uzunluğu: 4832738'] ['İndex Numarası: 54', 'İmzalanma Tarihi: 2018-01-01T00:12:49Z'] ['İndex Numarası: 54', 'Blok Uzunluğu: 4832739'] ... ... ... ['İndex Numarası: 70', 'İmzalanma Tarihi: 2018-01-01T00:16:29Z'] ['İndex Numarası: 70', 'Blok Uzunluğu: 4832755'] ['İndex Numarası: 71', 'İmzalanma Tarihi: 2018-01-01T00:16:55Z'] ['İndex Numarası: 71', 'Blok Uzunluğu: 4832756'] ['İndex Numarası: 72', 'İmzalanma Tarihi: 2018-01-01T00:17:30Z'] ['İndex Numarası: 72', 'Blok Uzunluğu: 4832757'] ['İndex Numarası: 73', 'İmzalanma Tarihi: 2018-01-01T00:17:35Z'] ['İndex Numarası: 73', 'Blok Uzunluğu: 4832758'] ['İndex Numarası: 74', 'İmzalanma Tarihi: 2018-01-01T00:17:43Z'] ['İndex Numarası: 74', 'Blok Uzunluğu: 4832759'] ['İndex Numarası: 75', 'İmzalanma Tarihi: 2018-01-01T00:18:14Z'] ... ... ... ['İndex Numarası: 95', 'İmzalanma Tarihi: 2018-01-01T00:22:33Z'] ['İndex Numarası: 95', 'Blok Uzunluğu: 4832780'] ['İndex Numarası: 96', 'İmzalanma Tarihi: 2018-01-01T00:22:39Z'] ['İndex Numarası: 96', 'Blok Uzunluğu: 4832781'] ['İndex Numarası: 97', 'İmzalanma Tarihi: 2018-01-01T00:22:43Z'] ['İndex Numarası: 97', 'Blok Uzunluğu: 4832782'] ['İndex Numarası: 98', 'İmzalanma Tarihi: 2018-01-01T00:22:55Z'] ['İndex Numarası: 98', 'Blok Uzunluğu: 4832783'] ['İndex Numarası: 99', 'İmzalanma Tarihi: 2018-01-01T00:23:17Z'] ['İndex Numarası: 99', 'Blok Uzunluğu: 4832784'] ['İndex Numarası: 100', 'İmzalanma Tarihi: 2018-01-01T00:23:27Z'] ['İndex Numarası: 100', 'Blok Uzunluğu: 4832785'] 

Tablo 117

Tablo 117'de örnek kod çıktısı verilmiştir.